package com.algorithm.ch1.cjm.other;

/**
 * @Author: Jie Ming Chen
 * @Date: 2018/9/16
 * @Version 1.0
 */
public class HammingWeight1 {

    public static void main(String[] args) {

        new HammingWeight1().hammingWeight(11);
    }

    /**
     * 五种位运算：
     *  左右两边为0 或者 1
     * （1）&(与)–有0则0；无0则1；
     * （2）|（或）–有1则1，无1则0；
     * （3）^（亦或）–相同为0，不同为1；
     * （4）>>右移（最右边的位被抛弃）
     * 正数，最左边添0；00001010>>3=00000001
     * 负数，最左边添1；10001010>>3=11110001
     * （5）<<左移（最左边的位被抛弃）–最右边统一添0；
     * （正数）00001010<<3=01010000
     * （负数）10001010<<3=01010000
     *
     * @param n
     * @return
     */
    int hammingWeight(int n) {
        int res = 0;
        for (int i = 0; i < 32; ++i) {
            res += (n & 1);
            n = n >> 1;
        }
        return res;
    }

}
